CSRF란?
CSRF Token
CSRF Token은 CSRF 공격을 방어하는 대표적인 방어 기법입니다. CSRF Token의 경우 같은 Origin의 접근만 허용할수 있도록 토큰을 사용자가 저장해 두고, HTTP 요청마다 함께 전송해서 웹 서버에서 해커가 악의적인 접근을 할수 없도록 token 검증을 통해서 제 3자의 개입을 막는 방법입니다. 이 값은 HTML form 태그의 hidden 속성에 입력되거나, 동적 요청에서도 사용될 수 있습니다.
CSRF Token의 경우 CAPTCHA 혹은 암호화 방식과 다르게 추가적인 사용자 상호작용이 필요 없다는 장점을 가지지만, Fetch API를 통한 Authorization 등의 인증 헤더를 설정하는 통신하는 과정에서 보안 문제의 원인이 되기도 합니다.
<?php
if(!isset($_SESSION["cstftoken"])) {
$csrftoken = bin2hex(random_bytes(32));
$_SESSION["csrftoken"] = $csrftoken;
)
} else {
$csrftoken = $_SESSION["cstftoken"];
}
$method = $_SESSION["HTTP_METHOD"];
if($method !== "GET" && $method !== "HEAD") {
!hash_equals($csrftoken, $_POST["cstftoken"]) {
header("HTTP/1.1 403 Forbidden");
die("CSRF detected");
}
echo "Input value:";
echo htmlentitles($_POST["query"], ENT_QOUTES|ENT_HTML5, 'utf-8');
}
?>
<form action="" method="POST">
<input name="csrftoken" type
</form>